package framework;

import java.io.InputStream;
import java.util.Properties;

/**
 * Класс-обёртка для работы с properties-файлами Для доступа к файлам
 * используется относительный путь (имя ресурса)
 */
public final class PropertiesResourceManager {

    private Properties properties = new Properties();

    public PropertiesResourceManager() {
        properties = new Properties();
    }

    public PropertiesResourceManager(String resourceName) {
        properties = appendFromResource(properties, resourceName);
    }

    /**
     * Конструктор для создания одного объекта из двух properties-файлов
     * 
     * @param defaultResourceName
     *            Имя 1-го ресурса
     * @param resourceName
     *            Имя 2-го ресурса (переопределяет одинаковые параметры)
     */
    public PropertiesResourceManager(
            String defaultResourceName,
            String resourceName) {
        this(defaultResourceName);

        properties = appendFromResource(
                new Properties(properties), resourceName);
    }

    /**
     * Объединение двух properties-файлов (параметры из 2-го файла
     * переопределяют параметры из 1-го)
     */
    private Properties appendFromResource(
            Properties objProperties,
            String resourceName) {
        try {
            if (resourceName != null) {
                InputStream inStream = this.getClass().getClassLoader()
                        .getResourceAsStream(resourceName);
                if (inStream != null) {
                    objProperties.load(inStream);
                    inStream.close();
                } else {
                     Logger.getInstance().error(
                             String.format("Resource \"%1$s\" could not be found",
                                         resourceName));
                }
            }
        } catch (Exception e) {
             Logger.getInstance().error("Platform resourse has not been found");
        }
        return objProperties;
    }

    /**
     * Получение значения параметра по ключу
     */
    public String getProperty(String key) {
        return properties.getProperty(key);
    }

    /**
     * Получение значения параметра по ключу
     */
    public String getProperty(String key, String defaultValue) {
        return properties.getProperty(key, defaultValue);
    }

    public void setProperty(String key, String value) {
        properties.setProperty(key, value);
    }

}
